# locust777


正的整数的原码，反码，补码相同
负的整数的原码，反码，补码是要计算的

7
000000000000000000000000000111 -原码
000000000000000000000000000111 -反码
000000000000000000000000000111 -补码


-7
100000000000000000000000000111 -原码
111111111111111111111111111000 -反码(原码符号位不变，其他位按位取反就是反码)
111111111111111111111111111001 -补码(反码 + 1就是补码)

整数在内存中存储的是补码
*/

//
////移位操作符
//#include<stdio.h>
//int mian()
//{
//	int a =7;
//	//
//	//左移操作符(左边丢弃，右边补零)
//	//移动的是二进制位
//	//
//	int b = a << 1;
//	printf("a = %d\n",a);
//	printf("b = %d\n",b);
//	scanf("%d",a);
//return 0;
//}     
//
//
//#include<stdio.h>
//int main()
//{
//	int a = -7;//负数 反码符号位不变其他相反，补码反码+1
//	int b = a << 1;
//	printf("a = %d\n",a);
//	printf("b = %d\n",b);
//	scanf("%d",a);
//return 0;
//}
//
//int main()
//{
////float f = 3.14f;
////float f2 = f << 1;//不支持
//
//	return 0;
//}


//右移操作符

//算数移位 :右边丢弃，左边补原符号位   //vs2019编译器采用的算数右移

//逻辑移位 :右边丢弃，左边补0

#include<stdio.h>
int main()
{
	int a = 7;
	int b = a >> 1;//右移操作符
	printf("a=%d\n",a);
	printf("b=%d\n",b);
	scanf("%d",a);
	
	//警告：对于移位操作符，不要移动负数位，这个是标准未定义的
	//int num = 10;
	//num >>-1//err

return 0;
}


//位操作符

/*
&   //按 （2进制） 位与
|   //按 （2进制） 位或
^   //按 （2进制） 位异或
*/

//注 ： 他们的操作数必须是整数


int main()
{
	int a = 3;
	int b = -5;
	int c = a & b;

	//int c = a | b;

	//int c = a ^ b;

	//000000000000000000000000000011 3的原码
	//000000000000000000000000000011 3的反码
	//000000000000000000000000000011 3的补码

	//100000000000000000000000000101 -5的原码
	//111111111111111111111111111010 -5的反码
	//111111111111111111111111111011 -5的补码

	//
	//%d 意味着打印一个有符号的整数
	//

	printf("c=%d\n",c);
return 0;
}

